  /**
   * {{^description}}Gets or Sets {{{name}}}{{/description}}{{#description}}{{description}}{{/description}}
   */
{{#withXml}}
  @XmlType(name="{{datatypeWithEnum}}")
  @XmlEnum({{dataType}}.class)
{{/withXml}}
{{#additionalEnumTypeAnnotations}}
  {{{.}}}
{{/additionalEnumTypeAnnotations}}
  public enum {{#datatypeWithEnum}}{{{.}}}{{/datatypeWithEnum}}{{^datatypeWithEnum}}{{classname}}{{/datatypeWithEnum}} {
    {{#allowableValues}}
        {{#enumVars}}
            {{#enumDescription}}
    /**
     * {{enumDescription}}
     */
            {{/enumDescription}}
            {{#withXml}}
    @XmlEnumValue({{#isInteger}}"{{/isInteger}}{{#isDouble}}"{{/isDouble}}{{#isLong}}"{{/isLong}}{{#isFloat}}"{{/isFloat}}{{{value}}}{{#isInteger}}"{{/isInteger}}{{#isDouble}}"{{/isDouble}}{{#isLong}}"{{/isLong}}{{#isFloat}}"{{/isFloat}})
            {{/withXml}}
    {{{name}}}({{{value}}}){{^-last}},{{/-last}}{{#-last}};{{/-last}}
        {{/enumVars}}
    {{/allowableValues}}

    private {{{dataType}}} value;

    {{#datatypeWithEnum}}{{{.}}}{{/datatypeWithEnum}}{{^datatypeWithEnum}}{{classname}}{{/datatypeWithEnum}}({{{dataType}}} value) {
      this.value = value;
    }

    {{#jackson}}
    @JsonValue
    {{/jackson}}
    public {{{dataType}}} getValue() {
      return value;
    }

    @Override
    public String toString() {
      return String.valueOf(value);
    }

    {{#jackson}}
    @JsonCreator
    {{/jackson}}
    public static {{#datatypeWithEnum}}{{{.}}}{{/datatypeWithEnum}}{{^datatypeWithEnum}}{{{classname}}}{{/datatypeWithEnum}} fromValue({{{dataType}}} value) {
      for ({{#datatypeWithEnum}}{{{.}}}{{/datatypeWithEnum}}{{^datatypeWithEnum}}{{{classname}}}{{/datatypeWithEnum}} b : {{#datatypeWithEnum}}{{{.}}}{{/datatypeWithEnum}}{{^datatypeWithEnum}}{{{classname}}}{{/datatypeWithEnum}}.values()) {
        if (b.value.equals(value)) {
          return b;
        }
      }
    {{#isNullable}}
      return null;
    {{/isNullable}}
    {{^isNullable}}
      throw new IllegalArgumentException("Unexpected value '" + value + "'");
    {{/isNullable}}
    }
  }